package br.com.foxinline.servico;

import br.com.foxinline.enums.StatusColetaDados;
import br.com.foxinline.generico.ServicoGenerico;
import br.com.foxinline.modelo.ColetaDados;
import br.com.foxinline.modelo.Usuario;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author roniere
 */
@Stateless
public class ColetaDadosServico extends ServicoGenerico<ColetaDados> {

    public ColetaDadosServico() {
        super(ColetaDados.class);
    }

    public ColetaDados buscarColetaDados(Long quadra) {
        String sql = "select c from ColetaDados c JOIN c.quadra q ";
        sql += " where q.id = " + quadra;

        List<ColetaDados> list = (List<ColetaDados>) getEntityManager().createQuery(sql).setMaxResults(1).getResultList();

        System.err.println(list);
        if (list != null && list.size() > 0) {
            return list.get(0);
        }

        return null;
    }

    public List<ColetaDados> buscarColetaDados(Integer quadra, Integer setor, Usuario usuario, StatusColetaDados statusColetaDados) {
        String sql = "select c from ColetaDados c JOIN c.quadra q JOIN q.setor s ";

        if (usuario != null || statusColetaDados != null) {
            sql += " JOIN c.situacaoColetaDados sc JOIN sc.usuarioAgente ua";
        }

        sql += " where ";
        
        if(statusColetaDados != null){
            sql += " sc.statusColetaDados = :statusColetaDados and ";
        }
        
        if (usuario != null) {
            sql += " ua.id = :usuarioAgente and ";
        }
        if (quadra != null) {
            sql += " q.numero = " + quadra + " and ";
        }

        if (setor != null) {
            sql += " s.numero = " + setor + " and ";
        }

        sql += " 1 = 1";
        Query query = getEntityManager().createQuery(sql);
        
        if (usuario != null) {
            query.setParameter("usuarioAgente", usuario.getId());
        }
        
        if(statusColetaDados != null){
            query.setParameter("statusColetaDados", statusColetaDados);
        }
        
        return query.getResultList();
    }
}
